﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sistema.Util
{
    abstract class CadastroBase<T>where T:Dominio.EntidadeValidavel<T>
    {
        public void Cadastrar(T dados)
        {
            RotinaPreCadastro(dados);
            RotinaCadastro(dados);
            RotinaPosCadastro(dados);
        }

        public void Alterar(T dados)
        {
            RotinaPreAlteracao(dados);
            RotinaAlteracao(dados);
            RotinaPosExclusao(dados);
        }

        public void Excluir(T dados)
        {
            RotinaPreExclusao(dados);
            RotinaExclusao(dados);
            RotinaPosExclusao(dados);
        }

        public abstract T Buscar(String ID);
        
        public abstract List<T> Buscar(T dadosConsulta);
        
        protected abstract bool VerificaSejaCadastrado(T dadosVerificacao);
        protected abstract void RotinaPreCadastro(T dados);
        protected abstract void RotinaCadastro(T dados);
        protected abstract void RotinaPosCadastro(T dados);
        protected abstract void RotinaPreAlteracao(T dados);
        protected abstract void RotinaAlteracao(T dados);
        protected abstract void RotinaPosAlteracao(T dados);
        protected abstract void RotinaPreExclusao(T dados);
        protected abstract void RotinaExclusao(T dados);
        protected abstract void RotinaPosExclusao(T dados);
    }
}
